package com.itheima.controller;

import com.itheima.exception.ClientException;
import com.itheima.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.util.List;

/**
 * 演示参数校验、全局异常处理、模拟用户登录
 */
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    /**
     * 保存学生信息
     * @param user
     * @Valid :开启校验
     * BindingResult result :封装了校验结果
     * @return
     */
    @PostMapping
    public String save(@Valid @RequestBody User user, BindingResult result){
        //自己手动if判断做校验
        /*if(user.getName()==null || user.getName().length()==0){
            return "name为空";
        }
        if(user.getAge()==null){
            return "age为空";
        }*/
        //使用专业的校验框架对user进行校验
        if(result.hasErrors()){  //是否有错误
            //获取所有错误集合
            List<FieldError> fieldErrors = result.getFieldErrors();
            //遍历所有的错误集合
            for (FieldError fieldError : fieldErrors) {
                //fieldError表示错误对象
                //log.info("{}", fieldError);
                //获取错误字段
                String field = fieldError.getField();
                //获取错误信息
                String defaultMessage = fieldError.getDefaultMessage();
                log.info("{}{}",field ,defaultMessage);
                //校验不合法就抛出异常到异常处理器中
                //throw new RuntimeException(field + defaultMessage);
                throw new ClientException(field + defaultMessage);
            }
            //return "参数不合法!";
        }

        log.info("save--->user:{}",user);
        //判断校验是否成功，如果有不合法数据，打印错误信息
        return "保存user成功";
    }

    /**
     * 模拟用户登录，在拦截器案例中使用
     * @param httpSession
     * @return
     */
    @PostMapping("/login")
    public String login(HttpSession httpSession){
        httpSession.setAttribute("user","user");
        return "登录成功!";
    }
}
